package Algoritmos;

public class CountingSort {	
	
	/**
	 * 
	 * @param A Arreglo con n enteros
	 * @param k Cota superior del rango en donde se encuentran los enteros de a: [0, k-1] 
	 * @return
	 */
	
	public static int[] countingSort(int A[], int k) {
        int[] C = new int[k];
        int N = A.length;
        int[] B = new int[N];
        
        int i;
        for (i = 0; i < N; i++) 
        	C[A[i]]++;
        //C[i] contiene # de valores == i
        for (i = 1; i < k; i++)
        	C[i] += C[i - 1];
        //C[i] contiene # valores <= que i
        for (i = N - 1; i >= 0; i--){
        	B[C[A[i]] - 1] = A[i];
        	C[A[i]]--;
        }
        return B;
	}

}
